package com.curricula.curriculum.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.curricula.curriculum.dao.Conexion;
import com.curricula.curriculum.dao.PersonalDAO;
import com.curricula.curriculum.vo.PersonalVO;

/**
 * Service que ofrece las funciones principales de administracion de datos
 * en el curriculum del usuario
 * 
 * @author Hugo
 * @version 1.0
 * 
 */
public class PersonalService {
	static Logger log = Logger.getLogger(PersonalService.class);
		
	/**
	 * Servicio que inserta la informacion basica del usuario en la tabla curricula.personal
	 * dependiendo del ID que este registrado en la sesion. Si el registro existe en la BD 
	 * unicamente lo actualiza.
	 * 
	 * @author Hugo
	 * @param PersonalForm personalVO
	 * @return boolean insertado
	 * @throws SQLException
	 */
	public static boolean llenar(PersonalVO personal) throws SQLException{
		PersonalVO personalVO = new PersonalVO();
		personalVO.setApellidoMaterno(null);
		personalVO.setApellidoPaterno(null);
		personalVO.setEdad(0);
		personalVO.setFechaNacimiento(null);
		personalVO.setNombre(null);
		personalVO.setSexo(null);
		personalVO.setEdoCivil(null);
		personalVO.setId(personal.getId());
		
		boolean modificado = false;
		Connection conn = null;
		try{
			conn = Conexion.getConexion();
			conn.setAutoCommit(false);
			try{
				if(PersonalDAO.find(personalVO, conn)==null)
					modificado = PersonalDAO.insert(personal, conn);
				else
					modificado = PersonalDAO.update(personal, conn);
				conn.commit();
			}catch (SQLException e) {
				log.error("Error SQL: "+ e);
				try {
					log.warn("Realizando Rollback");
					conn.rollback();
				} catch (SQLException e1) {
					log.error("Error de SQL: "+ e1);
					throw e1;
				}
			}			
		}catch(SQLException e){
			log.error("Error de SQL: "+ e);
			throw e;
		}finally{
			if(conn!= null)
				try {
					conn.close();
				} catch (SQLException e) {
					log.error("Error al cerrar la conexion: "+ e);
				}				
		}
		return modificado;		
	}
	
	
	/**
	 * Servicio que obtiene un objeto del tipo PersonalForm con la informacion basica 
	 * del usuario de la tabla curricula.personal dependiendo del ID que este registrado en la sesion. 
	 * 
	 * @author Hugo
	 * @param PersonalVO personal
	 * @return PersonalVO
	 * @throws SQLException
	 */
	public static PersonalVO obtener(PersonalVO personal) throws SQLException{
		PersonalVO infoPersonal = null;
		List<PersonalVO> listaPersonal = new ArrayList<PersonalVO>();
		Connection conn = null;
		try{
			conn = Conexion.getConexion();
			conn.setAutoCommit(false);
			try{
				listaPersonal = PersonalDAO.find(personal, conn);
				if(listaPersonal!=null)
					infoPersonal = (PersonalVO)listaPersonal.get(0);
				else
					infoPersonal = new PersonalVO();
				conn.commit();
			}catch (SQLException e) {
				log.error("Error SQL: "+ e);
				try {
					log.warn("Realizando Rollback");
					conn.rollback();
				} catch (SQLException e1) {
					log.error("Error de SQL: "+ e1);
					throw e1;
				}
			}			
		}catch(SQLException e){
			log.error("Error de SQL: "+ e);
			throw e;
		}finally{
			if(conn!= null)
				try {
					conn.close();
				} catch (SQLException e) {
					log.error("Error al cerrar la conexion: "+ e);
				}				
		}
		return infoPersonal;		
	}	

}
